// 路由
const express = require('express')
const router = express.Router()

// 生产token的jwt
const jwt = require('jsonwebtoken')

// 加密盐
const bcrypt = require("bcrypt")

// 引入 User 表
const users = require('../models/users')

// 引入处理上传图片的multer
const multer = require('multer')

// 登录
router.post('/login',(req,res)=>{
    const accunt = req.body.accunt
    const password = req.body.password
    // console.log(accunt)
    // console.log(password)
    //查询数据库
    users.findOne({accunt}).then(user=>{
        if(!user){
            return res.json({code:599,msg:'用户不存在'})
        }
        bcrypt.compare(password,user.password)
        .then(isMatch=>{
            if(isMatch){
                const rule={
                    id:user.id,
                    accunt:user.accunt,
                    identity:user.identity,
                    avator:user.avator,
                    username:user.username,
                    money:user.money,
                    address:user.address,
                }
                jwt.sign(rule,'quan_and_huan',{expiresIn:60*60},(err,token)=>{
                    if(err) throw err
                    res.json({
                        code:200,
                        // 名字一定是Bearer加空格
                        tokenKey:'Bearer '+token
                    })
                })
            }else{
                return res.json({code:599,msg:'密码错误'})
            }
        })
    })
})

// 注册
router.post('/register',(req,res)=>{
    // 查询数据库中是否拥有邮箱
    users.findOne({
        accunt:req.body.accunt
    }).then(user=>{
        if(user){
            return res.json({code:599,msg:'该用户已被注册！'})
        }else{
            // 存储用户
            const newUser = new users({
                accunt:req.body.accunt,
                password:req.body.password,
            })
            // 因为下面加了盐,所有后面的密码不为空,所以得在这里加一层判断(客户端会做验证加不加没关系)
            if(newUser.password === '') return res.json({code:599,msg:'密码不能为空'})
            bcrypt.genSalt(10,function(err,salt){
                bcrypt.hash(newUser.password,salt,(err,hash)=>{
                    //箭头函数中hash就是加密后的密码
                    if(err) throw err
                    newUser.password = hash
                    newUser.save()
                           .then(user=>res.json({code:200,data:user}))
                           .catch(err=>console.log(err))
                })
            })
        }
    })
})

// 用户图片上传
let userStorage = multer.diskStorage({
    // 上传路径
    destination: function (req, file, cb) {
        cb(null, 'upload/userImg')
    },
    // 文件名
    filename: function (req, file, cb) {
        let temp = file.originalname.split('.');
        let fileExtension = temp[temp.length - 1];
        cb(null, 'quan' + Date.now() + "." + fileExtension);
    }
})
var userImageUpload = multer({
    storage: userStorage
})
// 单图
router.post('/userImageUpload',userImageUpload.single('userImg'),(req,res)=>{
    const temp = req.headers.tokenkey
    const temp1 = temp.split(' ')
    const token = temp1[1]
    jwt.verify(token,'quan_and_huan',(err, authData) => {
        if(err) {
            res.json({code:598,msg:'token失效,请重新登录!'});
        }else{
            // 有的话就拼接一下
            req.file.filename = req.file.filename ? 'http://localhost:7777/upload/userImg/' + req.file.filename : ''
            // 返回文件全部信息
            res.json({code:200,data:req.file});
        }
    });
})

// 商品图片上传
let goodsStorage = multer.diskStorage({
    // 上传路径
    destination: function (req, file, cb) {
        cb(null, 'upload/goodsImg')
    },
    // 文件名
    filename: function (req, file, cb) {
        let temp = file.originalname.split('.');
        let fileExtension = temp[temp.length - 1];
        cb(null, 'huan' + Date.now() + "." + fileExtension);
    }
})
var goodsImageUpload = multer({
    storage: goodsStorage,
    // limits:{files:'6'}
})
// 多图(这里加了数量限制也没有用，前端来做限制吧)
router.post('/goodsImageUpload',goodsImageUpload.array('goodsImg',6),(req,res)=>{
    const temp = req.headers.tokenkey
    const temp1 = temp.split(' ')
    const token = temp1[1]
    jwt.verify(token,'quan_and_huan',(err, authData) => {
        if(err) {
            res.json({code:598,msg:'token失效,请重新登录!'});
        }else{
            // console.log(req.files)
            // 有的话就拼接一下
            req.files[0].filename = req.files[0].filename ? 'http://localhost:7777/upload/goodsImg/' + req.files[0].filename : ''
            // 返回文件全部信息
            res.json({code:200,data:req.files});
        }
    });
})

// 轮播图上传
let setStorage = multer.diskStorage({
    // 上传路径
    destination: function (req, file, cb) {
        cb(null, 'upload/setImg')
    },
    // 文件名
    filename: function (req, file, cb) {
        let temp = file.originalname.split('.');
        let fileExtension = temp[temp.length - 1];
        cb(null, 'dwq' + Date.now() + "." + fileExtension);
    }
})
var setImageUpload = multer({
    storage: setStorage
})
// 单图
router.post('/setImageUpload',setImageUpload.single('setImg'),(req,res)=>{
    const temp = req.headers.tokenkey
    const temp1 = temp.split(' ')
    const token = temp1[1]
    jwt.verify(token,'quan_and_huan',(err, authData) => {
        if(err) {
            res.json({code:598,msg:'token失效,请重新登录!'});
        }else{
            // 有的话就拼接一下
            req.file.filename = req.file.filename ? 'http://localhost:7777/upload/setImg/' + req.file.filename : ''
            // 返回文件全部信息
            res.json({code:200,data:req.file});
        }
    });
})

// 验证token测试(postman)
// router.post('/test',(req,res)=>{
//     const temp = req.headers['tokenkey']
//     const temp1 = temp.split(' ')
//     const token = temp1[1]
//     jwt.verify(token,'quan_and_huan',(err, authData) => {
//         if(err) {
//             res.json({code:598,msg:'token失效,请重新登录!'});
//         }else{
//             res.json({
//               authData
//             });
//         }
//     });
// })

// 测试
// router.get('/test1',(req,res)=>{
//     // 自己客户端发的请求（和postman设置的请求头不一样）
//     // 测token
//     const temp = req.headers.authorization
//     const temp1 = temp.split(' ')
//     const token = temp1[1]
//     jwt.verify(token,'quan_and_huan',(err, authData) => {
//         if(err) {
//             res.json({code:599,msg:'token失效,请重新登录!'});
//         }else{
//             res.json({code:200,data:authData});
//         }
//     });
//     // 基础连接测试
//     res.json({
//         msg:'Hello Huan'
//     });
// })

// 导出路由
module.exports=router